Linux Shell 重定向输入和输出 您所在的位置:网站首页 shell 标准输出重定向 Linux Shell 重定向输入和输出

Linux Shell 重定向输入和输出

2023-12-16 00:51| 来源: 网络整理| 查看: 265

1、重定向输入和输出

  有些时候你想要保存某个命令的输出而不仅仅只是让它显示在显示器上。bash shell提供了几个操作符,可以将命令的输出重定向到另一个位置(比如文件)。重定向可以用于输入,也可以用于输出,可以将文件重定向到命令输入

1.1 输出重定向

  最基本的重定向将命令的输出发送到一个文件中。bash shell用大于号(>)来完成这项功能:

1 command > outputfile

  之前显示器上出现的命令输出会被保存到指定的输出文件中。

1 $ date > test6 2 $ ls -l test6 3 -rw-r--r-- 1 user user 29 Feb 10 17:56 test6 4 $ cat test6 5 Thu Feb 10 17:56:58 EDT 2014 6 $

  重定向操作符创建了一个文件test6(通过默认的umask设置),并将date命令的输出重定向到该文件中。如果输出文件已经存在了,重定向操作符会用新的文件数据覆盖已有文件。

1 $ who > test6 2 $ cat test6 3 user pts/0 Feb 10 17:55 4 $

  现在test6文件的内容就是who命令的输出。  有时,你可能并不想覆盖文件原有内容,而是想要将命令的输出追加到已有文件中,比如你正在创建一个记录系统上某个操作的日志文件。在这种情况下,可以用双大于号(>>)来追加数据。

1 $ date >> test6 2 $ cat test6 3 user pts/0 Feb 10 17:55 4 Thu Feb 10 18:02:14 EDT 2014 5 $

  test6文件仍然包含早些时候who命令的数据,现在又加上了来自date命令的输出。

1.2 输入重定向

  输入重定向和输出重定向正好相反。输入重定向将文件的内容重定向到命令,而非将命令的输出重定向到文件。  输入重定向符号是小于号( /proc/self/fd/1 1代表:/dev/stdout  3. 标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ; /dev/stderr -> /proc/self/fd/2 2代表:/dev/stderr

 输出重定向:

  格式:

  command-line1 [1-n] > file或文件操作符或设备

   上面命令意思是:将一条命令执行结果(标准输出,或者错误输出,本来都要打印到屏幕上面的) 重定向其它输出设备(文件,打开文件操作符,或打印机等等)1,2分别是标准输出,错误输出。

1 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls 2 #找了个空的目录创建 test.sh 文件 3 zhengchuanyu@zhengchuanyu:~/xiaoyu$ touch test.sh 4 #显示当前目录文件 test.sh test1.sh, test1 实际不存在 5 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh 6 ls: cannot access 'test1.sh': No such file or directory 7 test.sh 8 9 #标准输出与错误输出都显示在屏幕上了,现在需要把正确输出写入zcy.txt 10 #1>中的1可以省略不写,默认标准输出 11 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh 1>zcy.txt 12 ls: cannot access 'test1.sh': No such file or directory 13 zhengchuanyu@zhengchuanyu:~/xiaoyu$ cat zcy.txt 14 test.sh 15 16 #把错误输出不输出到屏幕,输出到err.txt 17 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh 1>zcy.txt 2>err.txt 18 zhengchuanyu@zhengchuanyu:~/xiaoyu$ cat zcy.txt err.txt 19 test.sh 20 ls: cannot access 'test1.sh': No such file or directory 21 #继续追加把输出写入zcy.txt err.txt ">>" 追加操作符 22 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh 1>>zcy.txt 2>>err.txt 23 zhengchuanyu@zhengchuanyu:~/xiaoyu$ cat zcy.txt err.txt 24 test.sh 25 test.sh 26 ls: cannot access 'test1.sh': No such file or directory 27 ls: cannot access 'test1.sh': No such file or directory 28 29 #将错误输出信息关闭掉 30 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh 2>&- 31 test.sh 32 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh 2>/dev/null 33 test.sh 34 #&[n] 代表是已经存在的文件描述符,&1 代表标准输出,&2 代表错误输出,&- 代表关闭与他绑定的描述符 35 #/dev/null 是Linux中的黑洞设备,什么信息只要输出给这个设备,都会被吞掉 36 37 #关闭所有输出 38 #关闭 1,2文件描述符 39 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh 1>&- 2>&- 40 #将1,2输出转发给/dev/null 设备 41 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh 1>/dev/null 2>/dev/null 42 #将标准错误输出 2 绑定 标准输出 1,然后将标准输出发送给 /dev/null设备,这种常用 43 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh >/dev/null 2>&1 44 #& 代表标准输出、标准错误输出,将所有标准输出、标准错误输出输入到/dev/null 设备 45 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls test.sh test1.sh &>/dev/null 46 zhengchuanyu@zhengchuanyu:~/xiaoyu$

   注意:

  1、shell遇到”>”操作符,会判断右边文件是否存在,如果存在就先删除,并且创建新文件。不存在直接创建。 无论左边命令执行是否成功。右边文件都会变为空。

  2、“>>”操作符,判断右边文件,如果不存在,先创建。以添加方式打开文件,会分配一个文件描述符[不特别指定,默认为1,2]然后,与左边的标准输出(1)或错误输出(2) 绑定。

  3、当命令:执行完,绑定文件的描述符也自动失效。0,1,2又会空闲。

  4、一条命令启动,命令的输入,正确输出,错误输出,默认分别绑定0,1,2文件描述符。

  5、一条命令在执行前,先会检查输出是否正确,如果输出设备错误,将不会进行命令执行

 输入重定向

   格式:

  command-line [n] file 5 string1 6 string2 7 string3 8 #这里按下 ctrl + d离开 9 10 #从fd.txt 中获得标准输入数据,然后标准输出给file文件 11 zhengchuanyu@zhengchuanyu:~/xiaoyu$ cat > file file string5 17 > string6 18 > EOF 19 # &1 3 #查看文件描述符,出现了6 4 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls /proc/self/fd 5 0 1 2 3 6 6 #将接下来所有命令的标准输出绑定到zcy.txt中(输出到)zcy.txt) 7 zhengchuanyu@zhengchuanyu:~/xiaoyu$ exec 1>zcy.txt 8 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls -al 9 #执行命令,发现什么都没有,因为标准输出已经输出到zcy.txt中了,但是此时如果cat zcy.txt,你会发现你依旧看不到任何内容,不要忘了上面做的事情,嘿嘿 10 11 #将标准输出绑定 fd 6 12 zhengchuanyu@zhengchuanyu:~/xiaoyu$ exec 1>&6 13 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls /proc/self/fd 14 0 1 2 3 6 15 #关闭fd 6描述符 16 zhengchuanyu@zhengchuanyu:~/xiaoyu$ exec 6>&- 17 zhengchuanyu@zhengchuanyu:~/xiaoyu$ ls /proc/self/fd 18 0 1 2 3 19 20 #在看看敲入命令,发现恢复了 21 zhengchuanyu@zhengchuanyu:~/xiaoyu$ cat zcy.txt 22 total 8 23 drwxrwxr-x 2 zhengchuanyu zhengchuanyu 4096 6月 11 00:56 . 24 drwxr-xr-x 29 zhengchuanyu zhengchuanyu 4096 6月 11 00:55 .. 25 -rw-rw-r-- 1 zhengchuanyu zhengchuanyu 0 6月 11 00:56 zcy.txt 26 zhengchuanyu@zhengchuanyu:~/xiaoyu$



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有